package com.itheima.d2_final.demo01;

//目标：掌握final关键字的特点
public class Demo {
    public static void main(String[] args) {
        /**
         * 修饰类：表明该类是最终类，不能被继承
         * 修饰方法：表明该方法是最终方法，不能被重写
         * 修饰变量：变量存储的值不能被修改
         */

        //1.尝试使用final修饰Fu类，禁止其他类继承Fu类

        //2.尝试用final修饰Fu类中的方法

        //3.尝试用final修饰变量
        final int age = 18;
        //尝试修改age的值
        //age = 19;

        Demo d = new Demo("张三");
        System.out.println(d.name);
        //d.name = "李四";

        //4.final修饰变量，使用场景：经常用来修饰一些只给我们用，但是不允许改的数据。比如系统的初始配置数据！
        //比如：一个系统的默认登录用户名和密码

        //6.定义一个Student类型的变量，接收一个Student对象，用final修饰
        final Student stu = new Student();
        //尝试修改stu记录的地址值。代码报错
        //stu = new Student();

        //地址值不能修改，但是地址指向的对象属性可以修改
        stu.name = "张三";
        System.out.println(stu.name);
    }

    //5.final也可以修饰成员变量，注意：必须在得到对象时，变量就需要被赋值
    //下面的代码如果正确，name不能被修改的值是一个默认值null，一个没有意义默认值还不能改！这个变量也就没有意义了！
    //final String name;

    //需要在得到对象时，这个属性有一个有意义的值
    //final String name = "张三";

    final String name;

    public Demo(String name) {
        this.name = name;
    }
}
